VPATH = src test
CC=gcc
ODIR=obj
SDIR=src
BDIR=bin
TDIR=test
BINS=generator
INC1= ./$(SDIR)/headers
INC2= ./$(TDIR)/headers
INCDIRS= -I $(INC1) -I $(INC2)

CFLAGS =  -g -pthread -lm -lrt $(INCDIRS) -lgsl -lgslcblas

_objects = $(patsubst %.c,%.o,$(wildcard $(SDIR)/*.c))
objects = $(patsubst $(SDIR)/%,$(ODIR)/%,$(_objects))

all: $(BINS)

$(ODIR)/%.o: %.c
	$(CC) -c -o $@ $< $(CFLAGS)

test: random-test modes-test
	./$(BDIR)/random-test
	./$(BDIR)/modes-test

generator: $(objects)
	$(CC) -Wl,-wrap,malloc -o $(BDIR)/$@ $^ $(CFLAGS)

random-test: $(ODIR)/random-test.o $(ODIR)/random.o $(ODIR)/wg_malloc.o $(ODIR)/cJSON.o $(ODIR)/test-bench.o
	$(CC) -Wl,-wrap,malloc -o $(BDIR)/$@ $^ $(CFLAGS)

modes-test: $(ODIR)/modes-test.o $(ODIR)/modes.o $(ODIR)/wg_malloc.o $(ODIR)/random.o $(ODIR)/test-bench.o $(ODIR)/cJSON.o
	$(CC) -Wl,-wrap,malloc -o $(BDIR)/$@ $^ $(CFLAGS)

scheduler-test: $(ODIR)/scheduler-test.o $(ODIR)/scheduler.o $(ODIR)/wg_malloc.o 
	$(CC) -Wl,-wrap,malloc -o $(BDIR)/$@ $^ $(CFLAGS)

.PHONY: clean

clean:
	rm $(BDIR)/generator $(ODIR)/*.o ./tmp/*